package com.tz.online.user.service.impl;

import java.util.List;

import com.tz.online.entity.Address;
import com.tz.online.entity.User;
import com.tz.online.exception.LoginException;
import com.tz.online.user.dao.IAddressDao;
import com.tz.online.user.dao.IUserDao;
import com.tz.online.user.service.IUserService;
import com.tz.online.util.BeanFactory;

/******
 * 用户业务接口
 * 此业务接口跨多个dao接口，也就是业务接口可以整合Dao接口
 * @author yejf
 *
 */
public class UserServiceImpl implements IUserService {
	
	//组合 UserDao接口，通过 BeanFactor 来实例化接口的实现类
	private IUserDao userDao = (IUserDao) BeanFactory.getBean("userDao");
	
	private IAddressDao addrDao = (IAddressDao) BeanFactory.getBean("addressDao");
	
	@Override
	public User login(String name, String pwd) throws LoginException {
		//判断
		if(name != null && name.trim().length() > 0) {
			User user = userDao.selectByName(name);
			//进一步判断
			if(user != null) {
				//说明此用户是合法的，再判断密码是否合法
				if(pwd.equals(user.getPassword())) {
					//说明密码也是匹配的，则返回这个用户
					return user;
				} else {
					//说明密码不正确，则抛出异常
					throw new LoginException("密码不正确！");
				}
			} else {
				//说明此用户不合法
				throw new LoginException("用户名不存在!");
			}
		} else {
			return null;
		}
	}

	/*****************
	 * 验证此用户名是否可用，如果可用，则返回true, 否则，返回false
	 * @param name
	 */
	@Override
	public boolean validate(String name) {
		//调用 dao的 selectByName方法
		User user = userDao.selectByName(name);
		//判断,如果有返回值，也就是user不为null，则说明此用户名已经存在，不可用， 否则，说明此用户名不存在，可用
		if(user != null) {
			return false;
		} else {
			return true;
		}
	}
	
	@Override
	public void register(User user) {
		//直接调用
		if(user != null) {
			userDao.save(user);
		}
	}

	@Override
	public void addAddress(Address a) {
		//
		if(a != null) {
			addrDao.save(a);
		}
	}

	@Override
	public void delAddress(Address a) {
		//
		if(a != null) {
			addrDao.delete(a);
		}
	}

	@Override
	public void updAddress(Address a) {
		//
		if(a != null) {
			addrDao.update(a);
		}
	}

	@Override
	public List<Address> getAddressByUser(User user) {
		//
		if(user != null) {
			Long userId = user.getId();
			if(userId != null) {
				return addrDao.findByUserId(userId);
			}
		}
		return null;
	}

	@Override
	public Address getAddrById(Long id) {
		//
		if(id != null) {
			return addrDao.findById(id);
		}
		return null;
	}

}
